home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / wais / waisgate / zutil.h < prev   
C/C++ Source or Header  |  1995-05-09  |  10KB  |  298 lines

  1. /* WIDE AREA INFORMATION SERVER SOFTWARE:
  2.    No guarantees or restrictions.  See the readme file for the full standard
  3.    disclaimer.    
  4.   
  5.    3.26.90    Harry Morris, morris@think.com
  6.    3.30.90  Harry Morris - Changed any->bits to any->bytes
  7.    4.11.90  HWM - fixed include file names, changed 
  8.                      writeCompressedIntegerWithPadding() to
  9.                   writeCompressedIntWithPadding()
  10. */
  11.  
  12. #ifndef _H_utils_Z39_50
  13. #define _H_utils_Z39_50
  14.  
  15. #include "cdialect.h"
  16.  
  17. #include "cutil.h"
  18.  
  19. /*----------------------------------------------------------------------*/
  20. /* Data types / constants */
  21.  
  22. /* bytes to leave for the header size info */
  23. #define HEADER_LEN    (size_t)2 
  24.  
  25. typedef long pdu_type;
  26.  
  27. #define    initAPDU            (pdu_type)20
  28. #define    initResponseAPDU        (pdu_type)21
  29. #define    searchAPDU            (pdu_type)22
  30. #define    searchResponseAPDU        (pdu_type)23
  31. #define    presentAPDU            (pdu_type)24
  32. #define    presentResponseAPDU        (pdu_type)25
  33. #define    deteteAPDU            (pdu_type)26
  34. #define    deleteResponseAPDU        (pdu_type)27
  35. #define    accessControlAPDU        (pdu_type)28
  36. #define    accessControlResponseAPDU    (pdu_type)29
  37. #define    resourceControlAPDU        (pdu_type)30
  38. #define    resourceControlResponseAPDU    (pdu_type)31
  39.  
  40. typedef struct any {    /* an any is a non-ascii string of characters */
  41.     unsigned long    size; 
  42.     char*            bytes;
  43.     } any;
  44.     
  45. typedef any    bit_map;     /* a bit_map is a group of packed bits */
  46.  
  47. typedef unsigned long data_tag;
  48.  
  49. #define DT_PDUType            (data_tag)1     
  50. #define    DT_ReferenceID            (data_tag)2
  51. #define    DT_ProtocolVersion        (data_tag)3
  52. #define    DT_Options            (data_tag)4
  53. #define    DT_PreferredMessageSize        (data_tag)5
  54. #define    DT_MaximumRecordSize        (data_tag)6
  55. #define    DT_IDAuthentication        (data_tag)7
  56. #define    DT_ImplementationID        (data_tag)8
  57. #define    DT_ImplementationName        (data_tag)9
  58. #define    DT_ImplementationVersion    (data_tag)10
  59. #define    DT_UserInformationField        (data_tag)11
  60. #define    DT_Result            (data_tag)12
  61. #define    DT_SmallSetUpperBound        (data_tag)13
  62. #define    DT_LargeSetLowerBound        (data_tag)14
  63. #define    DT_MediumSetPresentNumber    (data_tag)15
  64. #define    DT_ReplaceIndicator        (data_tag)16
  65. #define    DT_ResultSetName        (data_tag)17
  66. #define    DT_DatabaseNames        (data_tag)18
  67. #define    DT_ElementSetNames         (data_tag)19
  68. #define    DT_QueryType            (data_tag)20
  69. #define    DT_Query            (data_tag)21
  70. #define    DT_SearchStatus            (data_tag)22
  71. #define    DT_ResultCount            (data_tag)23
  72. #define    DT_NumberOfRecordsReturned    (data_tag)24
  73. #define    DT_NextResultSetPosition    (data_tag)25
  74. #define    DT_ResultSetStatus        (data_tag)26
  75. #define    DT_PresentStatus        (data_tag)27
  76. #define    DT_DatabaseDiagnosticRecords    (data_tag)28
  77. #define    DT_NumberOfRecordsRequested    (data_tag)29
  78. #define    DT_ResultSetStartPosition    (data_tag)30
  79. #define    DT_ResultSetID            (data_tag)31
  80. #define    DT_DeleteOperation        (data_tag)32
  81. #define    DT_DeleteStatus            (data_tag)33
  82. #define    DT_NumberNotDeleted        (data_tag)34
  83. #define    DT_BulkStatuses            (data_tag)35
  84. #define    DT_DeleteMSG            (data_tag)36
  85. #define    DT_SecurityChallenge        (data_tag)37
  86. #define    DT_SecurityChallengeResponse    (data_tag)38
  87. #define    DT_SuspendedFlag        (data_tag)39
  88. #define    DT_ResourceReport        (data_tag)40
  89. #define    DT_PartialResultsAvailable    (data_tag)41
  90. #define    DT_ContinueFlag            (data_tag)42
  91. #define    DT_ResultSetWanted        (data_tag)43
  92.  
  93. #define UNUSED    -1
  94.  
  95. /* number of bytes required to represent the following sizes in compressed 
  96.    integer format
  97.  */
  98. #define CompressedInt1Byte    128         /* 2 ^ 7 */
  99. #define CompressedInt2Byte    16384         /* 2 ^ 14 */
  100. #define CompressedInt3Byte    2097152     /* 2 ^ 21 */
  101. /* others may follow ... */
  102.  
  103. /* types of query */
  104. #define QT_0    "0"    /* query whose non-standard format has been agreed upon
  105.                client and server */
  106. /* values for InitAPDU option element */
  107. #define    WILL_USE        TRUE
  108. #define WILL_NOT_USE        FALSE
  109. #define WILL_SUPPORT        TRUE
  110. #define WILL_NOT_SUPPORT    FALSE
  111.  
  112. /* values for InitResponseAPDU result element */
  113. #define ACCEPT    TRUE
  114. #define REJECT    FALSE
  115.  
  116. /* values for SearchAPDU replace indicator element */
  117. #define ON    TRUE
  118. #define OFF    FALSE
  119.  
  120. /* values for SearchResponseAPDU search status element */
  121. #define    SUCCESS    0 /* intuitive huh? */
  122. #define FAILURE    1
  123.  
  124. /* values for SearchResponseAPDU result set status element */
  125. #define    SUBSET    1
  126. #define INTERIM    2
  127. #define NONE    3
  128.  
  129. /* values for SearchResponseAPDU present status element */
  130. /* SUCCESS already defined */
  131. #define PARTIAL_1    1
  132. #define PARTIAL_2    2
  133. #define PARTIAL_3    3
  134. #define PARTIAL_4    4
  135. #define PS_NONE        5 /* can't use NONE since it was used by result 
  136.                  set status */
  137.  
  138. #if defined(BSD) || defined(M_UNIX)
  139. #define DIAGNOSTIC_CODE_SIZE    3
  140. #else  /* BSD only on a encore/gould */
  141. #define DIAGNOSTIC_CODE_SIZE    (size_t)3
  142. #endif /* BSD */
  143.  
  144. typedef struct diagnosticRecord 
  145.  { boolean    SURROGATE;
  146.    char        DIAG[DIAGNOSTIC_CODE_SIZE];
  147.    char*     ADDINFO;
  148.  } diagnosticRecord;
  149.  
  150. #define D_PermanentSystemError           "S1"
  151. #define D_TemporarySystemError           "S2"
  152. #define D_UnsupportedSearch           "S3"
  153. #define D_TermsOnlyStopWords           "S5"
  154. #define D_TooManyArgumentWords           "S6"
  155. #define D_TooManyBooleanOperators      "S7"
  156. #define D_TooManyTruncatedWords           "S8"
  157. #define D_TooMany IncompleteSubfields  "S9"
  158. #define D_TruncatedWordsTooShort       "SA"
  159. #define D_InvalidFormatForRecordNumber "SB"
  160. #define D_TooManyCharactersInSearch    "SC"
  161. #define D_TooManyRecordsRetrieved      "SD"
  162. #define D_PresentRequestOutOfRange     "SF"
  163. #define D_SystemErrorInPresentRecords  "SG"
  164. #define D_RecordNotAuthorizedToBeSent  "SH"
  165. #define D_RecordExceedsPrefMessageSize "SI"
  166. #define D_RecordExceedsMaxRecordSize   "SJ"
  167. #define D_ResultSetNotSuppAsSearchTerm "SK"
  168. #define D_OnlyOneRsltSetAsSrchTermSupp "SL"
  169. #define D_OnlyANDingOfASnglRsltSetSupp "SM"
  170. #define D_RsltSetExistsNoReplace       "SN"
  171. #define D_ResultSetNamingNotSupported  "SO"
  172. #define D_CombinationDatabasesNotSupp  "SP"
  173. #define D_ElementSetNamesNotSupported  "SQ"
  174. #define D_ElementSetNameNotValid       "SR"
  175. #define D_OnlyASingleElmntSetNameSupp  "SS"
  176. #define D_ResultSetDeletedByTarget     "ST"
  177. #define D_ResultSetIsInUse             "SU"
  178. #define D_DatabasesIsLocked            "SV"
  179. #define D_TerminatedByNoContinueResp   "SW"
  180. #define D_ResultSetDoesNotExist        "SX"
  181. #define D_ResExNoResultsAvailable      "SY"
  182. #define D_ResExUnpredictableResults    "SZ"
  183. #define D_ResExValidSubsetOfResults    "T1"
  184. #define D_AccessControlFailure         "T2"
  185. #define D_SecurityNotIssuedReqTerm     "T3"
  186. #define D_SecurityNotBeIssuedRecNotInc "T4"
  187.  
  188. /*----------------------------------------------------------------------*/
  189.  
  190. /* for internal error handling */
  191.  
  192. #ifndef _C_utils_Z39_50_
  193. extern char* readErrorPosition;     /* pos where buf stoped making sense */
  194. #endif /*ndef _C_utils_Z39_50_ */
  195.  
  196. /* the following are macros so that they can return OUT of the function
  197.    which calls them
  198.  */
  199.  
  200. #define RETURN_ON_NULL(var)                     \
  201.     if (var == NULL)                          \
  202.       return(NULL); /* jump out of caller */
  203.  
  204. #define REPORT_READ_ERROR(pos)                     \
  205.     { readErrorPosition = (pos);                \
  206.       return(NULL); /* jump out of caller */        \
  207.     }
  208.  
  209. #define CHECK_FOR_SPACE_LEFT(spaceNeeded,spaceLeft)        \
  210.     { if (*spaceLeft >= spaceNeeded)            \
  211.         (*spaceLeft) -= spaceNeeded;            \
  212.       else                            \
  213.        { *spaceLeft = 0;                     \
  214.          return(NULL); /* jump out of the caller */     \
  215.        }                            \
  216.     }
  217.  
  218. /*----------------------------------------------------------------------*/
  219.  
  220. #ifdef __cplusplus
  221. /* declare these as C style functions */
  222. extern "C"
  223.     {
  224. #endif /* def __cplusplus */
  225.  
  226. diagnosticRecord* makeDiag _AP((boolean surrogate,char* code,char* addInfo));
  227. void freeDiag _AP((diagnosticRecord* diag));
  228. char* writeDiag _AP((diagnosticRecord* diag,char* buffer,long* len));
  229. char* readDiag _AP((diagnosticRecord** diag,char* buffer));
  230.  
  231. char* writeCompressedInteger _AP((unsigned long num,char* buf,long* len));
  232. char* readCompressedInteger _AP((unsigned long *num,char* buf));
  233. char* writeCompressedIntWithPadding _AP((unsigned long num,unsigned long size,
  234.                      char* buffer,long* len));
  235. unsigned long writtenCompressedIntSize _AP((unsigned long num));
  236.  
  237. char* writeTag _AP((data_tag tag,char* buf,long* len));
  238. char* readTag _AP((data_tag* tag,char* buf));
  239. data_tag peekTag _AP((char* buf));
  240. unsigned long writtenTagSize _AP((data_tag tag));
  241.  
  242. any* makeAny _AP((unsigned long size,char* data));
  243. void freeAny _AP((any* a));
  244. any* duplicateAny _AP((any* a));
  245. char* writeAny _AP((any* a,data_tag tag,char* buffer,long* len));
  246. char* readAny _AP((any** anAny,char* buffer));
  247. unsigned long writtenAnySize _AP((data_tag tag,any* a));
  248.  
  249. any* stringToAny _AP((char* s));
  250. char* anyToString _AP((any* a));
  251. unsigned long writtenStringSize _AP((data_tag tag,char* s));
  252.  
  253. any* longToAny _AP((long Num));
  254. long anyToLong _AP((any* a));
  255.  
  256. char* writeString _AP((char* s,data_tag tag,char* buffer,long* len));
  257. char* readString _AP((char** s,char* buffer));
  258.  
  259. bit_map* makeBitMap _AP((unsigned long numBits,...));
  260. void freeBitMap _AP((bit_map* bm));
  261. boolean bitAtPos _AP((long pos,bit_map* bm));
  262. char* writeBitMap _AP((bit_map* bm,data_tag tag,char* buffer,long* len));
  263. char* readBitMap _AP((bit_map** bm,char* buffer));
  264.  
  265. char* writeByte _AP((unsigned long byte,char* buf,long* len));
  266. char* readByte _AP((unsigned char* byte,char* buf));
  267.  
  268. char* writeBoolean _AP((boolean flag,char* buf,long* len));
  269. char* readBoolean _AP((boolean* flag,char* buf));
  270.  
  271. char* writePDUType _AP((pdu_type pduType,char* buf,long* len));
  272. char* readPDUType _AP((pdu_type* pduType,char* buf));
  273. pdu_type peekPDUType _AP((char* buf));
  274.  
  275. char* writeBinaryInteger _AP((long num,unsigned long size,
  276.                   char* buf,long* len));
  277. char* readBinaryInteger _AP((long* num,unsigned long size,char* buf));
  278. unsigned long writtenCompressedBinIntSize _AP((long num));
  279.  
  280. char* writeNum _AP((long num,data_tag tag,char* buffer,long* len));
  281. char* readNum _AP((long* num,char* buffer));
  282. unsigned long  writtenNumSize _AP((data_tag tag,long num));
  283.  
  284. void doList _AP((void** list,void (*func)()));
  285.  
  286. char* writeProtocolVersion _AP((char* buf,long* len));
  287. char* defaultImplementationID _AP((void));
  288. char* defaultImplementationName _AP((void));
  289. char* defaultImplementationVersion _AP((void));
  290.  
  291. #ifdef __cplusplus
  292.     }
  293. #endif /* def __cplusplus */
  294.  
  295. /*----------------------------------------------------------------------*/
  296.  
  297. #endif /* ndef _H_utils_Z39_50 */
  298.